Sestavite funkcijo prva_vrstica(ime_datoteke)
, ki vrne prvo vrstico
datoteke z danim imenom.
def prva_vrstica(ime_datoteke): '''Vrne prvo vrstico datoteke (brez znaka za prehod v novo vrsto) Če je datoteka prazna, kot rezultat vrnemo prazen niz ''' dat = open(ime_datoteke) vrst = dat.readline() vrst = vrst.rstrip() # odstranimo znak za novo vrsto dat.close() return vrst def prva_vrstica_V1(ime_datoteke): ''' Funkcija vrne prvo vrstico iz datoteke Če je datoteka prazna, kot rezulat vrnemo prazen niz ''' dat = open(ime_datoteke, 'r') vrst = dat.readline() dat.close() return vrst[:-1] # odstranimo znak za novo vrsto def prva_vrstica_V2(ime_datoteke): '''Vrne prvo vrstico datoteke (brez znaka za prehod v novio vrsto) Predpostavka: Datoteka ni prazna! ''' # uporabimo nekaj drugačnih prijemov - razmisli o njih! with open(ime_datoteke) as f: return f.readlines()[0].rstrip()
Sestavite funkcijo stevilo_dolgih_vrstic(ime_datoteke, dolz)
, ki vrne število
vseh vrstic v datoteki z danim imenom, ki so dolge vsaj dolz
znakov
(pri tem je dolz
-ti lahko tudi znak "\n"
za novo vrstico).
def stevilo_dolgih_vrstic(ime_datoteke, dolz): '''vrne število vrstic v datoteki, ki so dolge vsaj dolz znakov Zraven štejemo tudi prehod v novoi vrsto''' kolikoJihJe = 0 for vrs in open(ime_datoteke): # gremo po vseh vrsticah datoteke if len(vrs) >= dolz : kolikoJihJe += 1 return kolikoJihJe def stevilo_dolgih_vrstic_V1(ime_datoteke, dolz): '''vrne število vseh vrstic v datoteki, ki so dolge vsaj dolz znakov ''' stVrstic = 0 for vrstica in open(ime_datoteke, 'r'): # prečešemo vse vrstice v datoteki # ali so dovolj dolge if len(vrstica) >= dolz: stVrstic += 1 return stVrstic def stevilo_dolgih_vrstic_V2(ime_datoteke, dolz): '''vrne število vrstic v datoteki, ki so dolge vsaj dolz znakov Zraven štejemo tudi prehod v novo vrsto''' # uporabimo nekaj drugačnih prijemov - razmisli o njih! with open(ime_datoteke) as f: return len([vrs for vrs in f if len(vrs) >= dolz])
Sestavite funkcijo najdaljsa_vrstica(ime_datoteke)
, ki vrne najdaljšo
vrstico v datoteki z danim imenom. Če je takih vrstic več, vrni zadnjo!
def najdaljsa_vrstica(ime_datoteke): ''' vrne najdaljšo vrstico v datoteki z danim imenom. ''' najdVrst = '' najDolz = 0 for vrst in open(ime_datoteke): dolTrenutne = len(vrst) if dolTrenutne >= najDolz: #boljši kandidat! = ker hočemo zadnjo! najdVrst = vrst najDolz = dolTrenutne return najdVrst.rstrip() def najdaljsa_vrstica_V2(ime_datoteke): ''' vrne najdaljšo vrstico v datoteki z danim imenom. ''' # uporabimo nekaj drugačnih prijemov - razmisli o njih! with open(ime_datoteke) as f: _, max_vrs = max((len(vrs), vrs) for vrs in f) return max_vrs.rstrip()
Sestavi funkcijo prestejVrstice(datoteka)
, ki prešteje, koliko vrstic je na
dani znakovni datoteki. Funkcija naj za parameter dobi ime datoteke.
def prestejVrstice(datoteka): ''' koliko vrstic je na dani znakovni datoteki prepostavimo, da je datoteka dovolj kratka, da lahko vse njene vrstice shranimo v seznam ''' f = open(datoteka,'r') stVrstic = len(f.readlines()) f.close() return stVrstic def prestejVrstice_V1(datoteka): ''' koliko vrstic je na dani znakovni datoteki''' # ta rešitev deluje, tudi, če je datoteka zelooooooo dolga stVrstic = 0 for vrst in open(datoteka) : # preko vseh vrstic stVrstic += 1 return stVrstic
Sestavi funkcijo vrniKVrstico(datoteka,k)
, ki vrne k-to vrstico dane znakovne datoteke.
Vrednost k in ime datoteke naj funkcija dobi za parameter.
V primeru ko datoteka ne vsebuje dovolj vrstic, naj vrne prazen niz.
def vrniKVrstico(datoteka,k): ''' vrne k-to vrstico dane datoteke ''' kolikoŠe = k # koliko vrstic je še potrebno prebrati f = open(datoteka,'r') while kolikoŠe > 0: vrstica = f.readline() if vrstica == '': # smo že čez konec datoteke, vrstic je premalo f.close() return '' kolikoŠe -= 1 # ena manj za prebrati f.close() return vrstica def vrniKVrsticoV2(datoteka,k): ''' vrne k-to vrstico dane datoteke ''' # če imamo dovolj prostora f = open(datoteka,'r') vrstice = f.readlines() f.close() if len(vrstice) >= k: # imamo dovolj vrstic return vrstice[k - 1] return ""
Na datoteki je pesem zapisana po kiticah.
To pomeni, da so med kiticami prazne vrstice. Sestavi
funkcijo odstraniPrazneVrstice(datotekaV, datotekaI)
, ki bo
za dano ime datoteke datotekaV
vse kitice združila in jih izpisala na
datoteko2.
Dekle je po vodo šlo
na visoke planine.
Vodo je zajemala,
je ribico zajela.
Ribica jo je prosila:
oj, pusti me živeti.
Dekle b'la je usmiljena,
je ribico spustila.
Ribica je zaplavala,
je dekle poškropila.
Dekle je po vodo šlo
na visoke planine.
Vodo je zajemala,
je ribico zajela.
Ribica jo je prosila:
oj, pusti me živeti.
Dekle b'la je usmiljena,
je ribico spustila.
Ribica je zaplavala,
je dekle poškropila.
def odstraniPrazneVrstice(datotekaV, datotekaI): '''Izpiše datoteko brez praznih vrstic''' f = open(datotekaV,'r') izpis = open(datotekaI, 'w') while True: trenutnaVrstica = f.readline() if trenutnaVrstica not in ['\n', '\r\n']: # različni načini (glede na OS) oblike prazne vrstice print (trenutnaVrstica,end='',file=izpis) if trenutnaVrstica == '': # smo že čez konec datoteke f.close() izpis.close() return def odstraniPrazneVrstice_V1(datotekaV, datotekaI): '''Izpiše datoteko brez praznih vrstic''' izpis = open(datotekaI, 'w') for vrstica in open(datoteka): if vrstica != '\n' : # ni prazna print(vrstica, end='', file=izpis) izpis.close()
Direktor podjetja je dobil datoteko priporocilo.txt
na kateri je pisalo:
Spoštovani gospod direktor,
Janeza Novaka, mojega asistenta pri delu, vedno vidite, kako
trdo dela v svoji mali pisarni. Janez dela neodvisno in ne
lenari ali se pogovarja s sodelovci. Nikoli se ne zgodi, da bi
zavrnil kakšnega sodelovca, ki potrebuje pomoc. Do sedaj je vedno
koncal z delom pravocasno. Zelo pogosto si vzeme podaljšan
delovni cas, da konca svoje delo, pri cemer vcasih preskoci
odmor. Janez je takšen delavec, ko nima absolutno nobenega
spodrslajaja pri opravljenih delih, ima visoke dosežke in je širokega
znanja na njegovem podrocju. Moje mnenje je, da ga lahko takoj
uvrstimo med tiste najbolj vzorne delovce, ki jih nikoli ne
odpustimo. Prav tako vam vljudno predlagam, da je moj predlog
o napredovanju tega izjemnega, vzornega in nepogrešljivega delavca
izvršen kakor hitro je mogoce.
Lep pozdrav!
Že se je spravil pisati predlog za napredovanje, ko je po e-pošti prispel dopis:
Direktor!
Ta idiot je stal za menoj, ko sem pisal prejšnje priporocilo.
Prosim znova preberite vsako drugo vrstico tega pisma.
Direktor je sedaj povsem zmeden. Pomagaj mu in sestavi funkcijo
izpisiDrugo(datotekaV, datotekaI)
, ki na datotekoI
izpiše vsako drugo vrstico
vsebine datoteke datotekaV
!
def izpisiDrugo(datotekaV, datotekaI): '''izpiše vsako drugo vrstico datoteke ''' f = open(datotekaV) izp = open(datotekaI, 'w') vrstica = " " # zelimo zaceti pri prvi vrstici while vrstica != '' : # do konca datoteke vrstica = f.readline() # ta je liha, zato jo izpišemo print(vrstica, end= '', file = izp) # ker že vsebuje \n # naslednjo preskočimo vrstica = f.readline() f.close() izp.close() def izpisiDrugoV1(datotekaV, datotekaI): '''izpiše vsako drugo vrstico datoteke ''' stVrstice = 1 izp = open(datotekaI, 'w') for vrstica in open(datoteka): if stVrstice % 2 == 1 : # vsako drugo preskočimo, začnemo s prvo print(vrstica, end= '', file = izp) # ker že vsebuje \n stVrstice += 1 izp.close() def izpisiDrugoV2(datoteka): ''' Če vemo, da je dovolj prostora, bomo uporabili kar readlines ''' f = open(datoteka) vrstice = f.readlines() izp = open(datotekaI, 'w') # iz seznama vzamemo vsako drugo vrstice = vrstice[::2] for vrstica in vrstice: # Sedaj pa jih le še izpišemo print(vrstica, end= '', file = izp) # ker že vsebuje \n def izpisiDrugoV3(datoteka): ''' In še malo bolj kompaktno ''' for vrstica in open(datoteka).readlines()[0:-1:2]: print(vrstica, end= '', file = izp) # ker že vsebuje \n izp.close()
Arheologi: Arheologi so v jami blizu Gize našli čuden papirus.
Besedilo na njem je bilo videti zelo čudno, a po drugi strani zelo podobno
našemu. Dolgo so poskušali vse, da bi ga razvozlali. Na koncu se je oglasil
6 letni Mihec, sin glavnega arheologa: "Oci, zakaj si pa na ta papir pisal v napačno smer?"
In res. Šlo je za povsem običajni tekst, le besedilo je bilo zapisano od desne proti levi.
Ker pa je tako besedilo malček zoprno brati, pomagaj arheologom in sestavi funkcijo arheologi(datoteka)
,
ki za dano ime datoteke sestavi novo datoteko z ravno obrnjenim imenom in enako koncnico
(iz bla.txt
torej naredi alb.txt
, iz mojaDat.py
pa taDajom.py
). Ta nova datoteka
naj vsebuje ravno obrnjene vrstice prvotne datoteke.
import os.path def arheologi(datoteka): '''sestavimo novo datoteko z ravno obrnjenim imenom in enako koncnico Ta nova datoteka vsebuje ravno obrnjene vrstice prvotne datoteke.''' #locimo koncnico datotek od imena ime, koncnica = os.path.splitext(datoteka) #ime datoteke obrnemo imeDat = ime[::-1] #ustvarimo novo datoteko z obrnjenim imenom novaDat = open(imeDat + koncnica,"w") for vrstica in open(datoteka,"r"): obVrstica = vrstica.rstrip()[::-1] # zraven se še znebimo zadnjega znaka print(obVrstica, file = novaDat) novaDat.close()